// import { updateUserUsingPost } from '@/services/backend/userController';
import { getBasicSettingsByUserId } from '@/services/backend/basicSettingsController';
import { getById } from '@/services/backend/complaintBaseInfoController';
import { openFilePath } from '@/services/backend/openFilePathController';
import {
  ApartmentOutlined,
  CheckCircleOutlined,
  EditOutlined,
  QuestionCircleOutlined,
  SortDescendingOutlined,
  UserDeleteOutlined,
  UserOutlined,
} from '@ant-design/icons';
import { ProDescriptions } from '@ant-design/pro-components';
import '@umijs/max';
import { useModel } from '@umijs/max';
import { Button, Divider, Flex, message, Modal, Tabs, TabsProps, Typography } from 'antd';
import dayjs from 'dayjs';
import React, { useEffect, useState } from 'react';

interface Props {
  oldData?: API.ComplaintBaseInfoVo;
  modalVisible: boolean;
  onSubmit: () => void;
  onCancel: () => void;
}

const UpdateModal: React.FC<Props> = (props) => {
  const { modalVisible, onSubmit, onCancel, oldData } = props;
  const [complaintBaseInfoVo, setComplaintBaseInfoVo] = useState<API.ComplaintBaseInfoVo>({});
  const [caseFiling, setCaseFiling] = useState<string>('e:\\');
  const { initialState } = useModel('@@initialState');
  const { currentUser } = initialState || {};
  const loadCaseFiling = async () => {
    try {
      //@ts-ignore
      const res = await getBasicSettingsByUserId({ userId: currentUser.id });
      setCaseFiling(res?.data?.caseFiling);
    } catch (e: any) {
      message.error(e.message);
    }
  };

  //初始化
  useEffect(() => {
    const initPage = async () => {
      await loadCaseFiling();
    };
    initPage();
  }, []);

  /**
   * 基本信息 node
   */
  const basicNode: React.ReactNode = (
    <>
      <ProDescriptions
        column={1}
        title={
          <>
            <SortDescendingOutlined style={{ marginRight: '5px' }} />
            基本信息
          </>
        }
        //@ts-ignore
        request={async () => {
          const res = await getById({
            //@ts-ignore
            id: oldData.id,
          });
          setComplaintBaseInfoVo(res.data || {});
          return {
            success: 200,
            data: res.data || [],
          };
        }}
      >
        <ProDescriptions.Item valueType="option">
          <Typography.Link
            key={'open'}
            onClick={async () => {
              await openFilePath({ filePath: caseFiling });
            }}
          >
            打开归档目录
          </Typography.Link>
        </ProDescriptions.Item>
        <ProDescriptions.Item label={'登记单位'} valueType={'text'} dataIndex={'departmentName'} />
        <ProDescriptions.Item label={'编号'} valueType={'text'} dataIndex={'number'} />
        <ProDescriptions.Item label={'登记号'} valueType={'text'} dataIndex={'registrationNo'} />
        <ProDescriptions.Item label={'来源分类'} valueType={'text'} dataIndex={'source'} />
      </ProDescriptions>
      <Divider />
      {['其他部门移送', '上级交办'].includes(complaintBaseInfoVo.source ?? '') ? (
        <ProDescriptions
          column={2}
          title={
            <>
              <ApartmentOutlined style={{ marginRight: '5px' }} />
              移送、交办部门信息
            </>
          }
          dataSource={{ ...complaintBaseInfoVo }}
        >
          <ProDescriptions.Item
            label={'部门名称'}
            valueType={'text'}
            dataIndex={['transferDepartmentDto', 'name']}
            span={2}
          />
          {complaintBaseInfoVo.transferDepartmentDto?.contactsList?.map((value, index) => (
            <React.Fragment key={index}>
              <ProDescriptions.Item label={'联系人'} valueType={'text'}>
                {value.name}
              </ProDescriptions.Item>
              <ProDescriptions.Item label={'联系电话'} valueType={'text'}>
                {value.phone}
              </ProDescriptions.Item>
            </React.Fragment>
          ))}
          <ProDescriptions.Item
            label={'联系地址'}
            valueType={'text'}
            span={2}
            dataIndex={['transferDepartmentDto', 'address']}
          />
        </ProDescriptions>
      ) : (
        ''
      )}
      <Divider />
      <ProDescriptions
        column={1}
        title={
          <>
            <UserOutlined style={{ marginRight: '5px' }} />
            投诉举报人信息
          </>
        }
        dataSource={{ ...complaintBaseInfoVo }}
      >
        <ProDescriptions.Item
          label={'投诉举报人姓名'}
          valueType={'text'}
          dataIndex={['complainantInfo', 'name']}
        />

        <ProDescriptions.Item
          label={'身份证号码'}
          valueType={'text'}
          dataIndex={['complainantInfo', 'idNo']}
        />

        <ProDescriptions.Item
          label={'联系电话'}
          valueType={'text'}
          dataIndex={['complainantInfo', 'phone']}
        />

        <ProDescriptions.Item
          label={'联系地址'}
          valueType={'text'}
          dataIndex={['complainantInfo', 'address']}
        />
      </ProDescriptions>
      <Divider />
      <ProDescriptions
        column={1}
        title={
          <>
            <UserDeleteOutlined style={{ marginRight: '5px' }} />
            被投诉举报人信息
          </>
        }
        dataSource={{ ...complaintBaseInfoVo }}
      >
        <ProDescriptions.Item
          label={'被举报人名称'}
          valueType={'text'}
          dataIndex={['agentInfo', 'name']}
        />

        <ProDescriptions.Item
          label={'统一社会信用代码'}
          valueType={'text'}
          dataIndex={['agentInfo', 'creditCode']}
        />

        <ProDescriptions.Item
          label={'被举报人地址'}
          valueType={'text'}
          dataIndex={['agentInfo', 'address']}
        />

        <ProDescriptions.Item
          label={'联系人姓名'}
          valueType={'text'}
          dataIndex={['agentInfo', 'contactPerson']}
        />

        <ProDescriptions.Item
          label={'联系电话'}
          valueType={'text'}
          dataIndex={['agentInfo', 'contactPhone']}
        />
      </ProDescriptions>
      <Divider />
      <ProDescriptions
        column={1}
        title={
          <>
            <QuestionCircleOutlined style={{ marginRight: '5px' }} />
            投诉举报明细
          </>
        }
        dataSource={{ ...complaintBaseInfoVo }}
      >
        <ProDescriptions.Item label={'接收日期'} valueType={'text'} dataIndex={'acceptanceDate'} />
        <ProDescriptions.Item
          label={'争议事实'}
          valueType={'text'}
          dataIndex={'complaintDesc'}
          render={(dom, entity) => {
            const complaintDesc = entity?.complaintDesc ?? null;
            let wayInfo = '投诉举报信';
            if (complaintDesc !== null) {
              // 使用正则表达式去掉前面的部分并去除空格
              wayInfo = complaintDesc
                .replace(/.*接到/, '')
                .trim()
                .split('，')[0];
            }

            let desc = '';
            if (complaintDesc !== null) {
              // 使用正则表达式去掉前面的部分并去除空格
              desc = complaintDesc
                .replace(/.*接到/, '')
                .trim()
                .split('，')[1];
            }
            return `我局接到${wayInfo}，投诉举报${entity.agentInfo?.name}${desc}`;
          }}
        />
      </ProDescriptions>
    </>
  );

  const isRegister = complaintBaseInfoVo.registerAcceptance?.isRegister;
  const registerEnumMap = new Map([
    [0, '不予立案'],
    [1, '已立案'],
  ]);
  /**
   * 投诉信息 node
   */
  const reportNode: React.ReactNode =
    isRegister === 1 ? (
      <>
        <ProDescriptions
          column={1}
          title={
            <>
              <EditOutlined style={{ marginRight: '5px' }} />
              审批信息
            </>
          }
          dataSource={{ ...complaintBaseInfoVo }}
        >
          <ProDescriptions.Item
            label={'立案结果'}
            valueEnum={registerEnumMap}
            dataIndex={['registerAcceptance', 'isRegister']}
          />

          <ProDescriptions.Item
            label={'立案日期'}
            valueType={'text'}
            dataIndex={['registerAcceptance', 'registerDate']}
          />

          <ProDescriptions.Item
            label={'被投诉人统一信用社会代码'}
            valueType={'text'}
            dataIndex={'creditCode'}
          />

          <ProDescriptions.Item
            label={'法定代表人(负责人)'}
            valueType={'text'}
            dataIndex={['agentInfo', 'contactPerson']}
          />
        </ProDescriptions>
        <Divider />
        <ProDescriptions
          column={1}
          title={
            <>
              <EditOutlined style={{ marginRight: '5px' }} />
              案件信息
            </>
          }
          dataSource={{ ...complaintBaseInfoVo }}
        >
          <ProDescriptions.Item valueType="option">
            <Typography.Link
              key={'open'}
              onClick={async () => {
                await openFilePath({ filePath: caseFiling });
              }}
            >
              打开归档目录
            </Typography.Link>
          </ProDescriptions.Item>
          <ProDescriptions.Item
            label={'案由'}
            valueType={'text'}
            dataIndex={['registerAcceptance', 'cause']}
          />
          <ProDescriptions.Item
            label={'核查情况及建议立案请求'}
            valueType={'text'}
            dataIndex={['registerAcceptance', 'situation']}
            render={(dom, entity) => {
              return (
                <>
                  {dayjs(entity.complaintDate).format('YYYY年M月D号')}，我局接到投诉举报信，投诉{entity.agentInfo.name}{entity.complaintDesc}。{entity.notRegisteredTerm}
                  {dom}{entity.registeredTerm}
                </>
              );
            }}
          />
        </ProDescriptions>
      </>
    ) : (
      <>
        <ProDescriptions
          column={1}
          title={
            <>
              <EditOutlined style={{ marginRight: '5px' }} />
              审批信息
            </>
          }
          dataSource={{ ...complaintBaseInfoVo }}
        >
          <ProDescriptions.Item
            label={'立案结果'}
            valueEnum={registerEnumMap}
            dataIndex={['registerAcceptance', 'isRegister']}
          />

          <ProDescriptions.Item
            label={'处理日期'}
            valueType={'text'}
            dataIndex={['registerAcceptance', 'registerDate']}
          />

          <ProDescriptions.Item
            label={'被投诉人统一信用社会代码'}
            valueType={'text'}
            dataIndex={'creditCode'}
          />

          <ProDescriptions.Item
            label={'法定代表人(负责人)'}
            valueType={'text'}
            dataIndex={['agentInfo', 'contactPerson']}
          />

          {/* <ProDescriptions.Item
            label={'调解终止日期'}
            valueType={'text'}
            dataIndex={['mediateDate']}
          /> */}
        </ProDescriptions>
        <Divider />
        <ProDescriptions
          column={1}
          dataSource={{ ...complaintBaseInfoVo }}
          title={
            <>
              <EditOutlined style={{ marginRight: '5px' }} />
              案件信息
            </>
          }
        >
          <ProDescriptions.Item valueType="option">
            <Typography.Link
              key={'open'}
              onClick={async () => {
                await openFilePath({ filePath: caseFiling });
              }}
            >
              打开归档目录
            </Typography.Link>
          </ProDescriptions.Item>
          <ProDescriptions.Item
            label={'案由'}
            valueType={'text'}
            dataIndex={['registerAcceptance', 'cause']}
          />
          <ProDescriptions.Item
            label={'核查情况及不予立案请求'}
            valueType={'text'}
            dataIndex={['registerAcceptance', 'situation']}
            render={(dom, entity) => {
              return (
                <>
                  {dayjs(entity.complaintDate).format('YYYY年M月D号')}，我局接到投诉举报信，
                  {entity.complaintDesc}，{dom}，{entity.notRegisteredDesc}
                </>
              );
            }}
          />
        </ProDescriptions>
      </>
    );

  const isAcceptance = complaintBaseInfoVo.isAcceptance;
  const acceptanceEnumMap = new Map([
    [0, '不予受理'],
    [1, '已受理'],
  ]);
  const complainNode: React.ReactNode =
    isAcceptance === 1 ? (
      <>
        <ProDescriptions
          column={1}
          title={
            <>
              <CheckCircleOutlined style={{ marginRight: '5px' }} />
              受理信息
            </>
          }
          dataSource={{ ...complaintBaseInfoVo }}
        >
          <ProDescriptions.Item valueType="option">
            <Typography.Link
              key={'open'}
              onClick={async () => {
                await openFilePath({ filePath: caseFiling });
              }}
            >
              打开归档目录
            </Typography.Link>
          </ProDescriptions.Item>
          <ProDescriptions.Item
            label={'受理结果'}
            valueEnum={acceptanceEnumMap}
            dataIndex={'isAcceptance'}
          />

          <ProDescriptions.Item
            label={'受理日期'}
            valueType={'text'}
            dataIndex={'acceptanceDate'}
          />

          <ProDescriptions.Item label={'联系人'} valueType={'text'} dataIndex={'contactPerson'} />

          <ProDescriptions.Item label={'联系电话'} valueType={'text'} dataIndex={'contactPhone'} />

          <ProDescriptions.Item
            label={'调解终止日期'}
            valueType={'text'}
            dataIndex={'mediateDate'}
          />

          <ProDescriptions.Item
            label={'调解终止所属情形'}
            valueType={'text'}
            dataIndex={'acceptanceSituation'}
            render={(dom) => {
              return (
                <>
                  投诉的调解过程中出现以下第<>{dom}</>
                  项情形，依据《市场监督管理投诉举报处理暂行办法》的规定，我局决定终止调解。
                  （一）投诉人撤回投诉或者双方自行和解的；
                  （二）投诉人与被投诉人对委托承担检定、检验、检测、鉴定工作的技术机构或者费用承担无法协商一致的；
                  （三）投诉人或者被投诉人无正当理由不参加调解，或者被投诉人明确拒绝调解的；
                  （四）经组织调解，投诉人或者被投诉人明确表示无法达成调解协议的；
                  （五）自投诉受理之日起四十五个工作日内投诉人和被投诉人未能达成调解协议的；
                  （六）市场监督管理部门受理投诉后，发现存在《市场监督管理投诉举报处理暂行办法》第十五条规定情形的；
                  （七）法律、法规、规章规定应当终止调解的其他情形。
                </>
              );
            }}
          />
        </ProDescriptions>
      </>
    ) : (
      <>
        <ProDescriptions
          column={1}
          title={
            <>
              <CheckCircleOutlined style={{ marginRight: '5px' }} />
              不受理信息
            </>
          }
          dataSource={{ ...complaintBaseInfoVo }}
        >
          <ProDescriptions.Item valueType="option">
            <Typography.Link
              key={'open'}
              onClick={async () => {
                await openFilePath({ filePath: caseFiling });
              }}
            >
              打开归档目录
            </Typography.Link>
          </ProDescriptions.Item>
          <ProDescriptions.Item
            label={'受理结果'}
            valueEnum={acceptanceEnumMap}
            dataIndex={'isAcceptance'}
          />
          <ProDescriptions.Item
            label={'处理日期'}
            valueType={'text'}
            dataIndex={'acceptanceDate'}
          />
          <ProDescriptions.Item
            label={'不受理投诉所属情形'}
            valueType={'text'}
            dataIndex={'acceptanceSituation'}
            render={(dom) => {
              return (
                <>
                  经审查，属以下第<>{dom}</>
                  项情形，依据《市场监督管理投诉举报处理暂行办法》的规定，我局（所）决定不予受理。
                  (一)投诉事项不属于市场监督管理部门职责，或者本行政机关不具有处理权限的；
                  (二)法院、仲裁机构、市场监督管理部门或者其他行政机关、消费者协会或者依法成立的其他调解组织已经受理或者处理过同一消费者权益争议的；
                  (三)不是为生活消费需要购买、使用商品或者接受服务，或者不能证明与被投诉人之间存在消费者权益争议的；
                  (四)除法律另有规定外，投诉人知道或者应当知道自己的权益受到被投诉人侵害之日起超过三年的；
                  (五)未提供《市场监督管理投诉举报处理暂行办法》第九条第一款和第十条规定的材料的；
                  (六)法律、法规、规章规定不予受理投诉的其他情形。
                </>
              );
            }}
          />
        </ProDescriptions>
      </>
    );

  // const loadData = async () => {
  //   if (!(oldData && oldData.id)) {
  //     return;
  //   }
  //   try {
  //     const res = await getById({
  //       id: oldData.id,
  //     });
  //     setComplaintBaseInfoVo(res.data as API.ComplaintBaseInfoVo);
  //   } catch (e: any) {
  //     message.error(e.msg);
  //   }
  // };

  // useEffect(() => {
  //   const fetchData = async () => {
  //     await loadData();
  //   };
  //
  //   fetchData();
  //
  //   console.log(complaintBaseInfoVo);
  // }, [oldData]);

  const items: TabsProps['items'] = [
    {
      key: 'basic',
      label: '基本信息',
      children: basicNode,
    },
    {
      key: 'complain',
      label: '投诉信息',
      children: complainNode,
    },
    {
      key: 'report',
      label: '举报信息',
      children: reportNode,
    },
  ];

  return (
    <Modal
      title={'投诉举报信息'}
      open={modalVisible}
      width={900}
      destroyOnClose
      footer={null}
      onCancel={onCancel}
    >
      <Tabs defaultActiveKey="basic" items={items} type={'card'} />
      <Divider />
      <Flex justify={'flex-end'}>
        <Button color={'volcano'} onClick={onSubmit}>
          取消
        </Button>
      </Flex>
    </Modal>
  );
};
export default UpdateModal;
